home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / perl / prlbkxmp.lha / ch6 / reform < prev    next >
Text File  |  1991-01-08  |  1KB  |  59 lines

  1. #!/usr/bin/perl
  2.  
  3. Usage: reform [-lNUM] [-rNUM] [-iNUM] [-sNUM] [files]
  4.  
  5. # Set default values for left margin, right margin, indent
  6. # and paragraph spacing.
  7.  
  8. $l = 0;
  9. $r = 0;
  10. $i = 0;
  11. $s = 1;
  12.  
  13. # Process any switches.
  14.  
  15. while ($ARGV[0] =~ /^-/) {
  16.     $_ = shift;
  17.     /^-(l|r|i|s)(\d+)/ && (eval "\$$1 = \$2", next);
  18.     die "Unrecognized switch: $_\n";
  19. }
  20.  
  21. # Calculate format strings.
  22.  
  23. $r = $l + 65 unless $r;
  24. $r -= $l;                       # make $r relative to $l
  25. die "Margins too close\n" if $l + $i >= $r;
  26.  
  27. $LEFT = ' ' x $l;
  28. $INDENT = ' ' x $i;
  29. $RIGHT1 = '^' . '<' x ($r - 1 - $i);
  30. $RIGHT2 = '^' . '<' x ($r - 1);
  31. $SPACING = "\n" x $s;
  32.  
  33. # Define a format at run time.
  34.  
  35. $form = <<"End of Format Definition";
  36. format STDOUT =
  37. $LEFT$INDENT$RIGHT1
  38. \$_
  39. $LEFT$RIGHT2~~
  40. \$_
  41. $SPACING.
  42. End of Format Definition
  43.  
  44. print $form if $debugging;
  45. eval $form;
  46.  
  47. # Set paragraph mode on input.
  48.  
  49. $/ = '';
  50.  
  51. # For each paragraph...
  52.  
  53. while (<>) {
  54.     s/\s+/ /g;                      # Canonicalize white space.
  55.     s/ $//;                         # Trim final space.
  56.     s/([a-z0-9][.!?][)'"]*) /$1  /g; # Fix sentence ends.
  57.     write;                          # Spit out new paragraph.
  58. }
  59.